<?php 
/**
 *以下代码由SDK生成器生成 @auther 18857165066 
 * 奥道短信平台接口 we7SMS 无需上传签名ID和模板ID
 * 
 */
/* @param $sitecode 微擎站点号 如需退量操作精确到站点请传站点号
 * @param $name 任务名称（必须）
 * @param $mobile 手机号码（必须）
 * @param $typeid 业务类型（必须）
 * @param $appid
 * @param $appkey
 * @param $time 发起请求时间（必须）
 * @param $token  随机值（必须）
 * @param $sign   参数加密后的签名（sha1(md5($token.$time.$appkey.$appid))）（必须）
 * @param $method 请求方式 post 
 * SDK_PHP_@auther yofung168
 * 
 */

class SmsClient{

    private $_app_id ='';
    private $_app_key = '';

    private $_last_error = array();

    private $_api_url = 'https://sms.aodao.com.cn/api/api.php';

    public function random_srt($length, $numeric = FALSE) {
        $seed = base_convert(md5(microtime() . $_SERVER['DOCUMENT_ROOT']), 16, $numeric ? 10 : 35);
        $seed = $numeric ? (str_replace('0', '', $seed) . '012340567890') : ($seed . 'zZ' . strtoupper($seed));
        if ($numeric) {
            $hash = '';
        } else {
            $hash = chr(rand(1, 26) + rand(0, 1) * 32 + 64);
            $length--;
        }
        $max = strlen($seed) - 1;
        for ($i = 0; $i < $length; $i++) {
            $hash .= $seed{mt_rand(0, $max)};
        }
        return $hash;
    }
    /**
     * 返回错误信息
     * @errno -1
     * @message
     */
    private function error($message){
        return array("errno"=>-1,"message"=>$message);
    }
    /**
     * @param array $param 配置参数
     * $appid api秘钥，在奥道短信后台短信->触发发送下面可查看
     */
    public function __construct( $param =  array() ){
        if( isset( $param['appid'] ) ){
            $this->_app_id = $param['appid'];
        }
        if(isset( $param['appkey'] ) ){
            $this->_app_key = $param['appkey'];
        }
    }
    /**
     * 发送短信内容
     * @datas 数据
     * @ sendsms
     */
    public function sendmsg($datas=array()){
        if(empty($datas)){
            return $this->error('缺少参数');
        }else{
            //准备$postdatas
            if(is_array($datas)){
                $token = $this->random_srt(8);
                $t = time();
                if(isset($datas["name"])){
                    $name = $datas['name']."_".date('Ymdhis',$t).'_'.$token;
                }elseif(isset($datas["sitecode"])){
                    $name = date('Ymdhis',$t).'_'.$token.'_'.$datas['sitecode'];
                }else{
                    $name = date('Ymdhis',$t).'_'.$token;
                }
                if(isset($datas["sendtime"])){
                    $sendtime=$datas["sendtime"];

                }else{
                    $sendtime=$t;
                }
                $agv = array(
                    'appid'=>  $this->_app_id,
                    'appkey'=> $this->_app_key,
                    'mobile'=> trim($datas['mobile']),
                    'time'=> $t,
                    'token'=>$token,
                    'sendtime' => $sendtime,
                    'sign' => sha1(md5($token.$t.$this->_app_key.$this->_app_id)),
                    'inform_con'=>$datas['inform_con'],//签名内容
                    'content'=>$datas['content'],//短信内容
                    'typeid'=>$datas['typeid'],
                    'name'=>$name ,
                    
                );
                $post_datas = array(
                    'a'=>'qingf',//微擎免审模式必须传该值
                    'agv'=>json_encode($agv)
                );
            }else{
                return $this->error('非合法数组');
            }
        }
        $headers[] = "Content-Type: application/x-www-form-urlencoded";
        $res = $this->http_post( $this->_api_url ,$post_datas ,$headers);
        $result = @json_decode( $res ,TRUE );
        if(isset($result['data'] )){
            if($result['data']['err_code']=='10044_1'){
                return $result;
            }else{
                return $this->getErrMsg($result['data']['err_code']);

            }
        }
        return $result;
    }

    /**
     * @param string $api_url 接口地址
     * @param array $param post参数
     * @param int $timeout 超时时间
     * @return bool
     */
    private function http_post( $api_url = '' , $param = array() ,$headers=array(), $timeout = 5 ){

        $host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');
        $ch = curl_init();
        curl_setopt( $ch, CURLOPT_URL, $api_url );
        curl_setopt($ch, CURLOPT_REFERER, $host);   //构造来路
        curl_setopt( $ch, CURLOPT_HTTP_VERSION  , CURL_HTTP_VERSION_1_0 );
        curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt( $ch, CURLOPT_HEADER, FALSE);
        $is_https =  parse_url( $api_url );
        if($is_https['scheme'] == 'https' ){
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST , FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , FALSE);
        }
        curl_setopt( $ch, CURLOPT_POST, TRUE);
        curl_setopt( $ch, CURLOPT_POSTFIELDS, $param );
        if (!empty($headers)) {
            //          curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }
        $res    = curl_exec( $ch );
        $error  = curl_error( $ch );
        curl_close( $ch );
        if( $error ){
            $this->_last_error[] =  $error;
            return FALSE;
        }
        return $res;
    }



    public function last_error(){
        return $this->_last_error;
    }

    /**
     * 根据错误编号获取错误信息
     * @param $code 错误编号
     */
    public function getErrMsg($code=''){

        $codes =array(
            '10001'=>'业务状态正常',
            '10001-2'=>'业务状态正常,启用二审流程',
            '10002'=>'指定的业务类型不存在',
            '10003'=>'指定的业务类型无权限'  ,
            '10021'=>'当前用户业务可用业务量不足',
            '10022'=>'当前用户信用额度不足',
            '10023'=>'当前用户账号金额不足',
            '10024'=>'当前用户已禁用',
            '10025'=>'当前用户未实名认证' ,
            '10026'=>'当前用户实名认证成功' ,
            '10031'=>'无效的appid',
            '10032'=>'无效的appkey',
            '10033'=>'无效的timestamp',
            '10034'=>'无效的token',
            '10035'=>'签名校验失败',
            '10036'=>'无效的业务类型ID',
            '10037'=>'无效的手机号码',
            '10038'=>'任务名称不能为空',
            '10039_1'=>'参数错误:模板ID(template_type)与签名内容(inform_con)和模板内容(content)不能同时使用',
            '10039_2'=>'参数错误:签名ID(inform_type)与签名内容inform_con和模板内容content 不能同时使用',
            '10039_3'=>'参数错误:模板ID(template_type)和签名ID(inform_type)必须同时使用',
            '10039_4'=>'参数错误:签名ID(inform_type)模板ID或则签名内容(inform_con)和模板内容(content)必须存在一组',
            '10039_5'=>'请使用POST提交',
            '10039_6'=>'sendtime时间戳小于等于系统时间',//仅作为内部调试时返回
            '10041'=>'非授权的IP访问',
            '10042'=>'无效的手机号',
            '10043'=>'无效的短信内容/短信模板未审核',
            '10044'=>'无效的短信签名/签名模板未审核',
            '10044_1'=>'包含屏蔽词',
            '10045'=>'无效的短信任务',
            '10046'=>'短信必须包含有签名',
            '10047'=>'无效的签名ID',
            '10048'=>'无效的模板ID',
            '10049'=>'无效的参数',
            '10051'=>'任务添加失败,请查网络',
            '10052'=>'任务添加失败,请查跨域权限',
            '10053'=>'任务添加失败,用户证书异常或未部署',
            '10054'=>'任务添加失败,无效的合同号/合同号未认证',
            '10055'=>'任务添加失败,业务类型未指定',
            '10056'=>'缺少该任务，或任务建立失败',
            '10061'=>'网络异常,后端接口离线',
            '10062'=>'网络异常,请查跨站协议身份',
            '10063'=>'网络异常,负载均衡节点超时',
            '10064'=>'网络异常,后端数据库节点超时',
            '10065'=>'网络异常,CDN节点超时'
        );

                $errmsg = isset($codes[$code])?$codes[$code]:"未知错误-".$code;

        return $errmsg;
    }
}


//以上代码由SDK生成器生成 @auther 18857165066 aspnmy@163.com
?>

